package pqt;

import java.util.Enumeration;

import jssc.SerialPort;
import jssc.SerialPortException;
import jssc.SerialPortList;

public class Conexion {
	
	private SerialPort puerto;
	private SerialPortList info;
	private static Conexion instance;
	
	
	
private Conexion()  {
	establecerConexion();
	
		
}

/*Para lograr el patron Singleton, esta funcion es la encargada de devovlerle a las clases que la llamen la instancia de la clase Conexion.
 * 
 * */
public static Conexion getInstance(){
	
	if(instance == null) {
		instance = new Conexion();
	}
	return instance;
}//fin getInstance();

public int getPeso() {
	
	String trama = "";
	int peso;
	// 02 30 30 30 31 31 30 03 01
	trama = getTrama();
	
	peso  = Character.getNumericValue(trama.charAt(4))  * 100000;
	peso += Character.getNumericValue(trama.charAt(7))  * 10000;
	peso += Character.getNumericValue(trama.charAt(10)) * 1000;
	peso += Character.getNumericValue(trama.charAt(13)) * 100;
	peso += Character.getNumericValue(trama.charAt(16)) * 10;
	peso += Character.getNumericValue(trama.charAt(19)) * 1;
	
			
	return peso;
}//fin getPeso();

/*
 * \brief Se encarga de solicitarle a la balanza el peso. Si el peso es inestable, se llama recursivamente hasta que lo sea.
 * 
 * \return Devuelve un String que contiene la trama completa.  
 * */
private String getTrama() {
	
	String trama=null;
	
	try {
			puerto.writeInt(5); //Comando para solicitarle a la balanza la trama.
		
			try {
				
				Thread.sleep(800); //Espera para poder darle tiempo a la balanza que lea.
			
			} catch (InterruptedException e) {
				
				e.printStackTrace();
			}
			
			trama = puerto.readHexString(); //convierto los valores de Hexa a String
			
		if(trama.length()>2){
				
				return trama;
			}
		else {
			trama = getTrama();
		}
			
		
	} catch (SerialPortException e) {
		e.printStackTrace();
	}
			
	return trama;
}//fin getTrama();

private void establecerConexion() {
	
	/*String[] lista = 	info.getPortNames();
	 for(int i = 0; i < lista.length; i++){
         System.out.println(lista[i]);
     }*/
	
	puerto = new SerialPort("COM11");
	
	try {
		puerto.openPort();
		puerto.setParams(9600, 8, 1, 0);
		
	} catch (SerialPortException e) {
		
		e.printStackTrace();
	}
	
}//fin establecerConexion();


}
